package com.hfy.admin.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import shade.powerjob.com.alibaba.fastjson.JSON;
import shade.powerjob.com.alibaba.fastjson.JSONObject;
import tech.powerjob.official.processors.impl.sql.AbstractSqlProcessor;
import tech.powerjob.official.processors.util.CommonUtils;
import tech.powerjob.worker.core.processor.TaskContext;

import java.sql.*;
import java.util.Properties;

/**
 * @ author 韩
 * time: 2025/3/10 10:39
 */
@Aspect
@Slf4j
@Component
public class DynamicDatasourceProcessorAspect {

//    @Around("execution(* tech.powerjob.official.processors.impl.sql.AbstractSqlProcessor.process0(..))")
//    public Object enhanceProcess0(ProceedingJoinPoint joinPoint) throws Throwable {
//        // 获取方法调用的参数
//        Object[] args = joinPoint.getArgs();
//        TaskContext taskContext = (TaskContext) args[0];
//        AbstractSqlProcessor.SqlParams sqlParams = (AbstractSqlProcessor.SqlParams) JSON.parseObject(CommonUtils.parseParams(taskContext), AbstractSqlProcessor.SqlParams.class);
//        // 继续执行原始方法
//        Object result = joinPoint.proceed();
//
//        // 在原始方法执行后，尝试从连接中获取ResultSet并添加到工作流上下文中
//        try {
//            // 从TaskContext中获取数据库连接
//            Statement statement = getConnectionFromTaskContext(sqlParams, taskContext).createStatement();
//            ResultSet resultSet = statement.getResultSet();
//
//            // 如果ResultSet不为空，则将其添加到工作流上下文中
//            if (resultSet != null) {
//                taskContext.getWorkflowContext().appendData2WfContext("result", resultSet);
//            }
//        } catch (SQLException e) {
//            // 处理可能的SQL异常
//            e.printStackTrace();
//        }
//
//        return result;
//    }
//    private Connection getConnectionFromTaskContext(AbstractSqlProcessor.SqlParams sqlParams, TaskContext taskContext) throws SQLException {
//        // 这里是一个占位符，您需要根据实际情况实现获取Connection的逻辑
//        // 例如，可以从taskContext中提取Connection对象
//        JSONObject params = JSONObject.parseObject(CommonUtils.parseParams(taskContext));
//        Properties properties = new Properties();
//        params.forEach((k, v) -> {
//            properties.setProperty(k, String.valueOf(v));
//        });
//        return DriverManager.getConnection(sqlParams.getJdbcUrl(), properties);
//    }


}
